package com.cskaoyan.javase.io._5print;

import java.io.*;

/**
 * 字符打印流PrintWriter
 * java.io.PrintWriter类，即字符打印流，它的作用几乎完全和PrintStream一致。
 * 主要区别有两点：
 *      1.字符打印流类似于字符输出流，存在一个缓冲区用于完成字符的编码（仅有编码作用，因为只能写）。
 *              所以打印完毕后，需要刷新缓冲区才能够实现打印的功能。（当然刷新的条件也是和之前一样）
 *      2.字符打印流在打印数据时以"字符"为基本处理单位，所以可以指定编码集。
 *
 * @since 16:59
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) throws IOException {
        // PrintWriter(File file)	使用指定文件创建不具有自动刷新缓冲区功能的新 PrintWriter。
        // PrintWriter out = new PrintWriter(new File("a.txt"));
        // PrintWriter(OutputStream out)	根据现有的 OutputStream 创建不具有自动刷新缓冲区功能的新 PrintWriter。
        // PrintWriter(OutputStream out,  boolean autoFlush)	通过现有的 OutputStream 创建新的  PrintWriter。
        // PrintWriter(String fileName)	创建具有指定文件名称且不具有自动刷新缓冲区功能的新 PrintWriter。
        // PrintWriter(Writer out)	创建不具有自动刷新缓冲区功能的新 PrintWriter。
        PrintWriter out2 = new PrintWriter(new OutputStreamWriter(new FileOutputStream("a.txt")), true);
        // PrintWriter(Writer out,  boolean autoFlush)	创建新 PrintWriter。

        // print(Xxx)	void	其中Xxx表示各种基本数据类型和Object、String类型。表示将对应数据写入输出流（但不换行）
        // println(Xxx)	void	其中Xxx表示各种基本数据类型和Object、String类型。表示将对应数据写入输出流（但换行）

        out2.println("hello world!");
        out2.println("hello world!");
        out2.println("hello world!");

        out2.flush();
        out2.close();
    }
}
